前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
  • React专栏

    • React组合式开发实战

      • 前端开发的四个时代
      • 企业管理系统的前世今生
      • 可视化页面搭建工具
      • 实战篇 01:开发前准备
      • 实战篇 02:项目脚手架
      • 实战篇 03:页面布局方案
      • 实战篇 04:权限管理机制
      • 实战篇 05:菜单匹配逻辑
      • 实战篇 06:消息通知设计
      • 实战篇 07:多语言支持
      • 继往开来:可视化页面搭建工具
    • React Hooks与Immutable实战

    • React SSR服务端渲染与同构实践

    • IM聊天系统前端开发实践

    • 微前端开发实战

    • React进阶实践

  • Vue专栏

  • 移动端专栏

  • Node专栏

  • 前端工程化专栏

  • 算法专栏

  • Typescript专栏

  • 其他专栏

完整面试题地址:
作者:程序员poetry
扫码关注作者公众号:「前端进阶之旅」 每天分享技术干货
前端进阶之旅公众号二维码

通过基础篇:后台同步可知,我们可通过后台同步机制来解决传统 Web 应用所存在的以下问题:

  • 页面发起的请求会随着页面的关闭而终止。
  • 在离线状态下,很难将用户的网络请求缓存起来,并在网络恢复正常后再次进行请求。
  • 从而为用户提供了恶劣网络环境下,无感知事务处理的能力。在该章中我们已对底层 API 的使用进行了详细介绍,故本章不再重述相关细节,而是直接对 Workbox 相关接口进行介绍说明。

# 基本使用

Workbox 使用 workbox.backgroundSync.Plugin 完成后台同步的注册,比如:

workbox.routing.registerRoute(
  '/articles',
  new workbox.strategies.NetworkOnly({
    plugins: [
      new workbox.backgroundSync.Plugin('createArticle')
    ]
  }),
  'POST'
);
@前端进阶之旅: 代码已经复制到剪贴板

示例中,当 POST /articles 请求失败时,Workbox 会自动将该请求添加到后台同步队列 createArticle 中,并在 sync 事件中自动进行重试。其中 workbox.backgroundSync.Plugin 的参数按照顺序依次为:

  • name:队列名称,该参数的值必须全局唯一,否则将抛出 duplicate-queue-name 异常。
  • options: 配置信息,相关属性为
    • maxRetentionTime:请求的最大有效时长(单位为分钟,默认值为七天),如果请求超过所指定的期限,将从队列中移除。
    • onSync:sync 触发时的回调函数,该回调函数的参数为含有 queue(类型为 workbox.backgroundSync.Queue 实例)属性的对象,如不指定将调用 workbox.backgroundSync.Queue 实例的 replayRequests 方法。若指定该属性的值,如果回调函数处理失败,需要抛出异常,以便浏览器后续继续进行尝试。

由于 workbox.backgroundSync.Plugin 内部使用了 workbox.backgroundSync.Queue 来管理同步请求队列,因此我们可以使用它来自行控制请求被加入队列的时机,比如

const queue = new workbox.backgroundSync.Queue('createArticle');

self.addEventListener('fetch', event => {
  event.waitUntil(
    fetch(event.request.clone).catch(() => {
      return queue.pushRequest({ request: event.request });
    })
  );
});
@前端进阶之旅: 代码已经复制到剪贴板

示例中,我们首先定义了 workbox.backgroundSync.Queue 实例 queue,然后在 fetch 事件中,如果请求出现异常,则调用 queue 的 pushRequest 方法将相关请求添加到同步队列中,之后 sync 事件触发后将自动重试队列中的请求。由于 workbox.backgroundSync.Queue 的参数与 workbox.backgroundSync.Plugin 一致,故不再重述。

# 同步事件注册

为了启用后台同步,我们在页面中注册了同步事件,主要代码如下:

window.addEventListener('load', function() {
  if ('serviceWorker' in<
fe
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
  • React专栏

    • React组合式开发实战

      • 前端开发的四个时代
      • 企业管理系统的前世今生
      • 可视化页面搭建工具
      • 实战篇 01:开发前准备
      • 实战篇 02:项目脚手架
      • 实战篇 03:页面布局方案
      • 实战篇 04:权限管理机制
      • 实战篇 05:菜单匹配逻辑
      • 实战篇 06:消息通知设计
      • 实战篇 07:多语言支持
      • 继往开来:可视化页面搭建工具
    • React Hooks与Immutable实战

    • React SSR服务端渲染与同构实践

    • IM聊天系统前端开发实践

    • 微前端开发实战

    • React进阶实践

  • Vue专栏

  • 移动端专栏

  • Node专栏

  • 前端工程化专栏

  • 算法专栏

  • Typescript专栏

  • 其他专栏